package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela Idcte0a1
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Idcte0a1 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Idcte0a1.jsp";
	private String versao;
	private String operacao;
	private int dataCorrente;
	private String p200;
	private String cab01;
	private String horaCorrente;
	private String ctl = "";
	private int matric;
	private String senha;
	private String empresa;
	private String nomeClasse;
	private long[] reggert = new long[3];
	private long[] ndemid = new long[3];
	private int[] nvia = new int[3];
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "ndemid";
	private String navegar = "";
	private Boolean temMensagem = false;
	private Result result;
	private Sessao sessao;
	// Classes views
	DidCadastro viu = new DidCadastro();

	// Classes includes
	public Idcte0a1() {
		inicializar(false);
	}

	public Idcte0a1(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "0";
			operacao = "";
			dataCorrente = 0;
			p200 = "";
			cab01 = "";
			ctl = "";
			reggert = new long[3];
			ndemid = new long[3];
			nvia = new int[3];
			matric = 0;
			senha = "";
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			matric = sessao.getSisgsisp().getMatric();
			operacao = sessao.getSisgsisp().getOperacao();
			senha = sessao.getSisgsisp().getSenha();
			versao = sessao.getSisgsisp().getVersao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarFuncao();
		if (temMensagem) {
			return false;
		}
		ValidarNdemid();
		if (temMensagem) {
			return false;
		}
		ValidarNvia();
		if (temMensagem) {
			return false;
		}
		ValidarReggert();
		if (temMensagem) {
			return false;
		}
		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setMatric(this.matric);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setSenha(this.senha);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	}

	private void ValidarFuncao() {
		// Consist�ncia F00funcao
		if (!(UtilBean.funcao.equals(UtilBean.ctt_processa) || UtilBean.funcao.equals(UtilBean.ctt_ajuda) || UtilBean.funcao.equals(UtilBean.ctt_pf2))) {
			enviarMensagem(null, "TECLA INVALIDA");
			return;
		}
	}

	private void ValidarReggert() {
		// Consist�ncia F00REGGERT
		int i;
		if (operacao.equals("ECI")) {
			if (reggert[1] == 0) {
				enviarMensagem(null, "INFORME O NUMERO DO R.G.");
				return;
			}
			for (i = 1; i <= 2; i++) {
				if (reggert[i] == 0 && ndemid[i] > 0) {
					enviarMensagem(null, "INFORME O NUMERO DO R.G.");
					return;
				}
				if (reggert[i] > 0) {
					// Par�grafo: h1()
					viu.histPorId(reggert[i], reggert[i]);
					viu.fecha();
					if (viu.totalRegistros() == 0) {
						enviarMensagem(null, "REGISTRO INEXISTENTE");
						return;
					}
				}
			}
		}
	}

	private void ValidarNdemid() {
		// Consist�ncia F00NDEMID
		int i;
		if (operacao.equals("ECI")) {
			for (i = 1; i <= 2; i++) {
				if (reggert[i] > 0 && ndemid[i] == 0) {
					enviarMensagem(null, "INFORME O NUMERO DO DOCUMENTO");
					return;
				}
			}
		}
	}

	private void ValidarNvia() {
		// Consist�ncia F00NVIA
		int i;
		if (operacao.equals("ECI") && ctl.equals("S")) {
			for (i = 1; i <= 2; i++) {
				if (nvia[i] < 1 && reggert[i] > 0) {
					enviarMensagem(null, "NUMERO DE VIA INVALIDO");
					return;
				}
			}
		}
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public int getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(int dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public String getP200() {
		return p200;
	}

	public void setP200(String p200) {
		this.p200 = p200;
	}

	public String getCab01() {
		return cab01;
	}

	public void setCab01(String cab01) {
		this.cab01 = cab01;
	}

	public String getCtl() {
		return ctl;
	}

	public void setCtl(String ctl) {
		this.ctl = ctl;
	}

	public int getMatric() {
		return matric;
	}

	public void setMatric(int matric) {
		this.matric = matric;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public long[] getReggert() {
		return reggert;
	}

	public void setReggert(long[] reggert) {
		this.reggert = reggert;
	}

	public long[] getNdemid() {
		return ndemid;
	}

	public void setNdemid(long[] ndemid) {
		this.ndemid = ndemid;
	}

	public int[] getNvia() {
		return nvia;
	}

	public void setNvia(int[] nvia) {
		this.nvia = nvia;
	}

	public long getReggert(int index) {
		return reggert[index];
	}

	public void setReggert(int index, long reggert) {
		this.reggert[index] = reggert;
	}

	public long getNdemid(int index) {
		return ndemid[index];
	}

	public void setNdemid(int index, long ndemid) {
		this.ndemid[index] = ndemid;
	}

	public int getNvia(int index) {
		return nvia[index];
	}

	public void setNvia(int index, int nvia) {
		this.nvia[index] = nvia;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}
}
